home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Cream of the Crop 1
/
Cream of the Crop 1.iso
/
PROGRAM
/
CHF.ARJ
/
CHF.PRG
< prev
Wrap
Text File
|
1991-10-02
|
4KB
|
154 lines
/******
PROGRAM: CHF.PRG
AUTHOR: Steve Kolterman
Date: 03/09/91
Version: Clipper 5.0 (CLIPPER CHF/N/M/A)
Notes: This program will produce a header file containing #define
directives for each field in a database. The values assigned are the
same as their position in the database structure.
Modified : by Tom Walden, to allow the user to add an optional prefix to the
DEFINE declarations for uniqueness.*****/
#include "Chf.ch" //Make sure you have this file also.
MEMVAR GetList
STATIC err_cume:=0 // Error counter
STATIC cSymbol :=' ' //Prefix
//STATIC gdirec:="\clipper5\develop\data\WKSAMP.DBF"
//LOCAL dbfch := gdirec+"wksamp.dbf"
FUNCTION MakeChfile(dbff,ch_name) //the Shell
LOCAL fn_array, w_area:= SELECT(),path
LOCAL oldcurs:=SETCURSOR(SC_NONE)
SET SCORE OFF
SET CURSOR ON
IF dbff<> NIL .AND. FILE(DBF_NAME)
// NEW CODE STARTS HERE
BEEP2
SETCOLOR('r/w')
CLEAR SCREEN
SETCOLOR('gr+/b')
@8,18 clear to 14,61
@8,18 to 14,61 DOUBLE
@10,22 Say 'Character prefix for field name:';
GET cSymbol PICT'@'
@12,22 SAY '(Examples: _m__^,or none)'
READ
cSymbol:=trim(cSymbol)
//End of new code
fn_array:=DIRECTORY(IF(WILDCARD,dbff,DBF_NAME))
ch_name:=IF(fn_array==NIL.OR. LEN(fn_array)>1,;
NIL,ch_name)
IF fn_array<>NIL
path:=IF("\"$dbff.OR.":\"$dbff,;
LEFT(dbff,RAT("\",dbff)),;
IF(":"$dbff,LEFT(dbff,RAT(":",dbff)),""))
AEVAL(fn_array,;
{|x,y| WriteCh(path,fn_array[y][F_NAME],ch_name)})
ENDIF
ENDIF
SELECT(w_area)
IF NIL_COND .OR. err_cume>0
QOUT("NEED A VALID .DBF SPEC")
END
SETCURSOR(oldcurs)
@18,37 SAY 'DONE!!' //NEW CODE
BEEP3
RETURN(err_cume)
FUNCTION WriteCh(path,dbffile,ch_name) //THE AUTHOR
LOCAL handle,dummy:={}
IF(handle:=FCREATE(IF(ch_name==NIL,(CH_NAME),;
ch_name+".CH"))) <> F_ERROR
USE (path+dbffile)NEW
ASIZE(dummy,FCOUNT())
FWRITE(handle,HEADLINE+TYPELINE)
AEVAL(dummy,{|x,y|FWRITE(handle,BUFFER)})
FWRITE(handle,FOOTLINE+CREDIT+COPYRITE)
USE
ENDIF
IF handle==-1;err_cume++;END
FCLOSE(handle)
RETURN(handle)
/*SK_Field.prg
The SK Field Functions. Pass'em either a field name or an ordinal.dbf
position. We don't care.
*/
#define FGV fieldget(var)
#define VTFGV valtype((FGV))
#define FBV FieldBlock(var)
#define FBFNV FieldBlock(fieldname(var))
#define EVFBV Eval((FBV))
#define VTFV valtype(EVFBV)
#define VTV valtype(var)
#define TNUM IF(!(VTV)$"NC",NIL,IF((VTV)=="N",(VTFGV),(VTFV)))
#define TCHR IF(!(VTV)$"NC",NIL,IF((VTV)=="N",(FGV),(EVFBV)))
#define DBS_NAME1
#translate ATRIM(<x>)=>LTRIM(TRIM(<x>))
/***
This series returns character or logical values.
****/
FUNCTION FieldVal(var)
RETURN(TCHR)
FUNCTION FieldType(var)
RETURN(TNUM)
FUNCTION FieldPlace(var,value)
RETURN EVAL(IF((VTV)=="N",(FBFNV),(FBV)),value)
FUNCTION FieldExist(var)
RETURN IF((VTV)=="N",(FBFNV<>NIL),;
IF((VTV)=="C",(FBV<>NIL),.F.))
/***
THIS SERIES RETURNS NUMERIC VALUES
***/
FUNCTION FieldLen(var)
RETURN IF((TNUM)=="D",LEN(DTOC((TCHR))),;
IF((TNUM)=="L",1,;
IF((TNUM)=="M",10,;
IF((TNUM)=="C",LEN((TCHR)),;
IF((TNUM)=="N",LEN(STR((TCHR))),-1)))))
FUNCTION FieldValLen(var)
RETURN IF((TNUM)=="D",LEN(DTOC((TCHR))),;
IF((TNUM)=="L",1,;
IF((TNUM)=="M",LEN(ATRIM((TCHR))),;
IF((TNUM)=="C",LEN(ATRIM((TCHR))),;
IF((TNUM)=="N",LEN(ATRIM(STR((TCHR)))),-1)))))
FUNCTION FieldDec(var)
RETURN IF((TNUM)<>"N",-1,;
IF((TNUM)=="N".AND."."$STR((TCHR)),;
LEN(STR((TCHR)))-AT(".",STR((TCHR))),0))
/*HATED TO WRITE IT THIS WAY, BUT THERE'S NO OTHER WAY TO WRITE IT ..
EXCEPT C OR .ASM IN THE CASE OF A 100 FIELD DBF. YOU USE MORE THAN 1300
BYTES OF MEM PLUS OVERHEAD FOR A CALL THAT MIGHT RETURN AS LITTLE AS 1 BYTE.*/
FUNCTION FieldNum(var)
LOCAL bdsarray:=Dbstruct()
RETURN IF((VTV)=="C".AND.(FBV<>NIL),;
ASCAN(dbsarrry,{|e| UPPER(var)==e[DBS_NAME]}),-1)
/*EOF:CHF.PRG*/